home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / CHKBOOK.PAK / CHECKVW.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  5KB  |  189 lines

  1. // checkvw.cpp : implementation of the CCheckView class
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1995 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13.  
  14. #include "stdafx.h"
  15. #include "chkbook.h"
  16.  
  17. #ifdef _DEBUG
  18. #undef THIS_FILE
  19. static char BASED_CODE THIS_FILE[] = __FILE__;
  20. #endif
  21.  
  22. IMPLEMENT_DYNCREATE(CCheckView, CFormView)
  23.  
  24. BEGIN_MESSAGE_MAP(CCheckView, CFormView)
  25.     //{{AFX_MSG_MAP(CCheckView)
  26.     ON_COMMAND(ID_EDIT_COMMIT_CHECK, OnEditCommitCheck)
  27.     ON_EN_CHANGE(IDC_AMOUNTNUM, OnAmountNumChange)
  28.     //}}AFX_MSG_MAP
  29. END_MESSAGE_MAP()
  30.  
  31. /////////////////////////////////////////////////////////////////////////////
  32. // Construction, destruction
  33.  
  34. CCheckView::CCheckView()
  35.     : CFormView(CCheckView::IDD)
  36. {
  37.     //{{AFX_DATA_INIT(CCheckView)
  38.     m_nCheckNo = 0;
  39.     m_dwCents = 0;
  40.     //}}AFX_DATA_INIT
  41. }
  42.  
  43.  
  44. CCheckView::~CCheckView()
  45. {
  46. }
  47.  
  48. /////////////////////////////////////////////////////////////////////////////
  49. // Operations
  50.  
  51. void CCheckView::OnUpdate(CView*, LPARAM lHint, CObject* pHint)
  52. {
  53.     // OnUpdate() is called whenever the document has changed and,
  54.     // therefore, the view needs to redisplay some or all of itself.
  55.  
  56.     CChkBookDoc* pDoc = GetDocument();
  57.     if (pDoc->GetRecordCount() == 0)
  58.         return;
  59.  
  60.     if (DYNAMIC_DOWNCAST(CFixedLenRecHint, pHint) != NULL)
  61.     {
  62.         m_nCheckNo = LOWORD(lHint) + pDoc->GetFirstCheckNo();
  63.     }
  64.     else
  65.     {
  66.         m_nCheckNo = pDoc->GetActiveCheckNo();
  67.     }
  68.  
  69.     GetDocument()->GetCheck(m_nCheckNo, m_dwCents, m_strPayTo,
  70.         m_strDate, m_strMemo);
  71.  
  72.     UpdateData(FALSE);  // Copy the view form object's data to the
  73.                         // controls (via DoDataExchange).
  74.  
  75.     Invalidate();       // Repaint the entire form view.
  76. }
  77.  
  78.  
  79. void CCheckView::DoDataExchange(CDataExchange* pDX)
  80. {
  81.     // ClassWizard maintains mappings between data of the CCheckView
  82.     // class and the controls in the dialog template resource for this
  83.     // form view.
  84.  
  85.     //{{AFX_DATA_MAP(CCheckView)
  86.     DDX_Text(pDX, IDC_CHECKNO, m_nCheckNo);
  87.     DDX_Text(pDX, IDC_DATE, m_strDate);
  88.     DDX_Text(pDX, IDC_MEMO, m_strMemo);
  89.     DDX_Text(pDX, IDC_PAYTO, m_strPayTo);
  90.     DDX_DollarsCents(pDX, IDC_AMOUNTNUM, m_dwCents);
  91.     //}}AFX_DATA_MAP
  92.  
  93.     // Update the written-out dollars and cents (eg, "nineteen and
  94.     // 98/100ths dollars") after loading or saving the numeric
  95.     // dollars and cents control (IDC_AMOUNTNUM).
  96.  
  97.     CString str = GetDollarsCentsText(m_dwCents);
  98.     GetDlgItem(IDC_AMOUNTTEXT)->SetWindowText(str);
  99. }
  100.  
  101.  
  102. BOOL CCheckView::MaybeCommitDirtyCheck()
  103. {
  104.     // Ask the user to confirm the discarding of uncommitted changes
  105.     // to the active check.
  106.     // Return FALSE if the user wants to cancel the change-selection
  107.     // command that would have discarded the uncommitted changes; and
  108.     // set the focus
  109.  
  110.     DWORD dwCents;
  111.     CString strPayTo, strDate, strMemo;
  112.  
  113.     // If there is a validation error, then let UpdateData()
  114.     // return focus to the offending control.
  115.     if (!UpdateData())
  116.         return FALSE;
  117.  
  118.     CChkBookDoc* pDoc = GetDocument();
  119.     ASSERT(m_nCheckNo == pDoc->GetActiveCheckNo());
  120.     pDoc->GetCheck(m_nCheckNo, dwCents, strPayTo, strDate, strMemo);
  121.     if (   (dwCents == m_dwCents)
  122.         && (strPayTo == m_strPayTo)
  123.         && (strDate == m_strDate)
  124.         && (strMemo == m_strMemo))
  125.         return TRUE;
  126.  
  127.     switch (AfxMessageBox(IDS_PROMPT_COMMIT_DIRTY_CHECK,
  128.         MB_YESNOCANCEL))
  129.     {
  130.     case IDYES:
  131.         pDoc->UpdateCheck(this, m_nCheckNo, m_dwCents,
  132.             m_strPayTo, m_strDate, m_strMemo);
  133.         return TRUE;
  134.  
  135.     case IDNO:
  136.         return TRUE;
  137.  
  138.     case IDCANCEL:
  139.         CMDIChildWnd* pChildWnd = (CMDIChildWnd*)GetParentFrame();
  140.         pChildWnd->GetMDIFrame()->MDIActivate(pChildWnd);
  141.     }
  142.     return FALSE;
  143. }
  144.  
  145. /////////////////////////////////////////////////////////////////////////////
  146. // CCheckView message handlers
  147.  
  148.  
  149. void CCheckView::OnEditCommitCheck()
  150. {
  151.     // This handler is called when the user chooses the Edit Commit
  152.     // Check menu command or toolbar button.
  153.  
  154.     // Copy dialog fields to the view object's data members.
  155.     // If there are validation errors, then abandon the commit.
  156.     if (!UpdateData())
  157.         return;
  158.  
  159.  
  160.     ASSERT(m_nCheckNo == GetDocument()->GetActiveCheckNo());
  161.  
  162.     // Update the document with the values entered by the user for
  163.     // this check.
  164.     GetDocument()->UpdateCheck(this, m_nCheckNo, m_dwCents, m_strPayTo,
  165.         m_strDate, m_strMemo);
  166. }
  167.  
  168.  
  169. void CCheckView::OnAmountNumChange()
  170. {
  171.     // When the dollar/cents amount numeric field (eg, "19.98") is changed
  172.     // by the user, then update the dollar/cents text field
  173.     // (eg, "Nineteen and 98/100ths Dollars").
  174.  
  175.     DWORD dwCents;
  176.     CWnd* pCtlAmountText = GetDlgItem(IDC_AMOUNTTEXT);
  177.     if (GetDollarsCents(GetDlgItem(IDC_AMOUNTNUM), dwCents))
  178.     {
  179.         CString str = GetDollarsCentsText(dwCents);
  180.         pCtlAmountText->SetWindowText(str);
  181.     }
  182.     else
  183.     {
  184.         CString str;
  185.         str.LoadString(IDS_UNKNOWN);
  186.         pCtlAmountText->SetWindowText(str);
  187.     }
  188. }
  189.